package GestionPlannification;

import java.sql.SQLException;
import java.util.Date;
import java.util.List;

/**
 * Classe représentant un Artiste (auteur ou acteur) d'une pièce
 * @author Aude Legrand, Alexandre Becquet
 */
public class Artiste { 
	private String nom;
	private String prenom;
	private Date dateNaissance;
    private int id;

    /**
     * 
     * @param nom
     * @param prenom
     * @param date
     */
    public Artiste(String nom, String prenom, Date date) {
        this.nom=nom;
        this.prenom=prenom;
        this.dateNaissance=date;
        try {
            ArtisteBD.saveArtiste(this);
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
    }

    /**
     * Constructeur de la classe Artiste sans id
     * @param nom
     * @param prenom
     * @param dateNaissance : la date de naissance en chaine de caractère
     * @throws java.lang.Exception
     */
    public Artiste(String nom, String prenom, String dateNaissance) throws Exception{
        this.nom = nom;
        this.prenom = prenom;
        this.dateNaissance = outils.OutilsDate.stringToDate(dateNaissance, "dd/MM/yyyy");
    }

    /**
     * Constructeur de la classe Artiste avec id
     * @param idArtiste
     * @param nom
     * @param prenom
     * @param dateNaissance : la date de naissance en chaine de caractère
     * @throws java.lang.Exception
     */
    public Artiste(int idArtiste,String nom, String prenom, String dateNaissance) throws Exception{
        this.id=idArtiste;
        this.nom = nom;
        this.prenom = prenom;
        this.dateNaissance = outils.OutilsDate.stringToDate(dateNaissance, "dd/MM/yyyy");
    }

    /**
     * Retourne l'id de l'artiste.
     * @return l'id de l'artiste
     */
    public int getId() {
        return this.id;
	}

    /**
     * Retourne le nom de l'artiste.
     * @return le nom de l'artiste
     */
	public String getNom() {
        return this.nom;
	}

    /**
     * Retourne le prénom de l'artiste.
     * @return le prénom de l'artiste
     */
	public String getPrenom() {
        return this.prenom;
	}

    /**
     * Retourne l'âge de l'artiste.
     * @return l'âge de l'artiste
     */
	public int getAge() {
        return outils.OutilsDate.yearOfDate(new Date())-outils.OutilsDate.yearOfDate(dateNaissance);
	}

    /**
     * Retourne tous les artistes
     * @return la liste des artistes
     */
    public static List<Artiste> findEntities() {
        List<Artiste> lesArtistes = null;
        try {
             lesArtistes= ArtisteBD.realAllArtistes();
        } catch (SQLException ex) {
            ex.printStackTrace();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return lesArtistes;
    }

    /**
     * Recherche un artiste grâce à son id
     * @param idArtiste l'id de l'artiste recherché
     * @return l'artiste recherché
     */
    public static Artiste findEntitie(int idArtiste) {
        Artiste a = null;
        try {
            a=ArtisteBD.readArtiste(idArtiste);
        } catch (SQLException ex) {
            ex.printStackTrace();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return a;
    }

    /**
     * Retourne la chaîne de caractère représentant l'Artiste
     * @return la chaîne de caractère représentant l'Artiste
     */
    @Override
    public String toString(){
        return this.prenom+" "+this.nom;
    }

    Date getDateNaissance() {
        return this.dateNaissance;
    }
}
